package com.locatme.modelBD;

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;

import com.locatme.model.Message;

public class MessageBD extends GestionBD {

    public MessageBD(Context context) {
        super(context);
    }

    /**
     * RecupMessagesByReceiver : Methode qui prend en parametre l'metteur et le
     * destinataire du message
     *
     * @param sender
     *            : String, utilisateur qui a envoy le message
     * @param receiver
     *            : String, utilisateur qui a recut le message
     * @return ArrayList contenant tous les messages du "receiver"
     */
    public ArrayList<Message> RecupMessagesByReceiver(String sender,
                                                      String receiver) {
        Cursor c = null;

        //Requete
        c = db.rawQuery("SELECT * FROM " + BdLocatme.TABLE_MESSAGE + " WHERE "
                + BdLocatme.COL_LOGIN_EMETTEUR + "= ? AND "
                + BdLocatme.COL_LOGIN_RECEPTEUR + "= ?", new String[] { sender,
                receiver });

        return CursorToMessages(c);
    }

    /**
     * RecupSenderByReceiver : Methode qui retourne tous les utilisateurs ayant
     * envoy des message  un utilisateur pass en parametre Utilis dans
     * MessagesFragment
     *
     * @param login
     *            : String
     * @return
     */
    public ArrayList<String> RecupSenderByReceiver(String login) {
        Cursor c = null;

        //Requete
        c = db.rawQuery("SELECT DISTINCT " + BdLocatme.COL_LOGIN_EMETTEUR
                + " FROM " + BdLocatme.TABLE_MESSAGE + " WHERE "
                + BdLocatme.COL_LOGIN_RECEPTEUR + "= ?", new String[] { login });

        return CursorToSender(c);
    }

    /**
     * CursorToSender : Parcours les rsultats contenu dans le cursor pass en
     * parametre et retourne une liste de login
     *
     * @param c
     *            : Cursor
     * @return ArrayList de login
     */
    private ArrayList<String> CursorToSender(Cursor c) {
        //Declaration de la liste de login
        ArrayList<String> senders = new ArrayList<String>();
        //Si le curseur n'est pas vide
        if (c.getCount() == 0 || c == null)
            return null;

        c.moveToFirst();
        //On parcours le curseur et on lui ajoute les login
        while (!c.isAfterLast()) {

            senders.add(c.getString(0));
            c.moveToNext();
        }
        c.close();
        return senders;
    }

    /**
     * CursorToMessages : Creer une liste de message  partir des rsultat
     * contenu dans le cursor pass en parametre
     * @param c : Cursor
     * @return ArrayList de Message
     */
    public ArrayList<Message> CursorToMessages(Cursor c) {
        //Declaration de la liste et des variables permettant de creer des Messages ( ajouter  la liste)
        ArrayList<Message> messages = new ArrayList<Message>();
        Message message = null;
        String objet;
        String destinataire;
        String emeteur;
        String textMess;
        String date;
        if (c.getCount() == 0) {
            return null;
        }
        c.moveToFirst();
        //Parcours du curseur et affectation des donnes dans les variables
        while (!c.isAfterLast()) {

            objet = c.getString(c.getColumnIndex(BdLocatme.COL_OBJET_MESSAGE));
            destinataire = c.getString(c
                    .getColumnIndex(BdLocatme.COL_LOGIN_RECEPTEUR));
            emeteur = c.getString(c
                    .getColumnIndex(BdLocatme.COL_LOGIN_EMETTEUR));
            textMess = c.getString(c.getColumnIndex(BdLocatme.COL_MESSAGE));
            date = c.getString(c.getColumnIndex(BdLocatme.COL_DATE_MESSAGE));
            //Cration du message
            message = new Message(objet, date, textMess, destinataire, emeteur);
            //Affectation du message
            messages.add(message);
            c.moveToNext();
        }
        c.close();
        return messages;
    }

    /**
     * insertMessage : Ajoute un message
     * @param msg : String
     * @return long : -1 si la requte ne s'est pas bien droule
     */
    public long insertMessage(Message msg) {
        ContentValues values = new ContentValues();
        values.put(BdLocatme.COL_LOGIN_EMETTEUR, msg.getEmetteur());
        values.put(BdLocatme.COL_LOGIN_RECEPTEUR, msg.getDestinataire());
        values.put(BdLocatme.COL_OBJET_MESSAGE, msg.getObjet());
        values.put(BdLocatme.COL_MESSAGE, msg.getTexte());
        values.put(BdLocatme.COL_DATE_MESSAGE, msg.getDate());
        return db.insert(BdLocatme.TABLE_MESSAGE, null, values);
    }

}